<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Coverage Report</title>
<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
<script type="text/javascript" src="js/popup.js"></script>
</head>
<body>
<h5>Coverage Report - org.azeckoski.reflectutils.ClassFields</h5>
<div class="separator">&nbsp;</div>
<table class="report">
<thead><tr>  <td class="heading">Classes in this File</td>  <td class="heading" width="20%"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td>  <td class="heading" width="20%"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td>  <td class="heading" width="10%"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
  <tr><td class="text"><a href="org.azeckoski.reflectutils.ClassFields.html">ClassFields</a></td><td class="value"><table cellpadding="0" cellspacing="0" align="right"><tr><td>83%&nbsp;</td><td><table class="percentGraph" cellpadding="0" cellspacing="0" width="100"><tr><td class="covered" width="83"></td><td class="uncovered" width="16"></td></tr></table></td></tr></table></td><td class="value"><table cellpadding="0" cellspacing="0" align="right"><tr><td>88%&nbsp;</td><td><table class="percentGraph" cellpadding="0" cellspacing="0" width="100"><tr><td class="covered" width="88"></td><td class="uncovered" width="11"></td></tr></table></td></tr></table></td><td class="value"><span class="hidden">0.0;</span>0</td></tr>
</table>
<div class="separator">&nbsp;</div>
<table cellspacing="0" cellpadding="0" class="src">
<tr>
  <td class="numLine">&nbsp;1</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;2</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * $Id: org.azeckoski.reflectutils.ClassFields.html 28 2008-10-02 16:17:03Z azeckoski $</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;3</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * $URL: http://reflectutils.googlecode.com/svn/maven/site/cobertura/org.azeckoski.reflectutils.ClassFields.html $</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;4</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * ClassFields.java - genericdao - May 5, 2008 2:16:35 PM - azeckoski</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;5</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> **************************************************************************</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;6</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Copyright (c) 2008 Aaron Zeckoski</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;7</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Licensed under the Apache License, Version 2</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;8</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;9</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * A copy of the Apache License, Version 2 has been included in this </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;10</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;11</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;12</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Aaron Zeckoski (azeckoski@gmail.com) (aaronz@vt.edu) (aaron@caret.cam.ac.uk)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;13</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;14</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;15</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">package</span> org.azeckoski.reflectutils;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;16</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;17</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.beans.BeanInfo;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;18</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.beans.IndexedPropertyDescriptor;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;19</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.beans.IntrospectionException;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;20</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.beans.Introspector;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;21</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.beans.PropertyDescriptor;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;22</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.lang.annotation.Annotation;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;23</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.lang.reflect.Field;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;24</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.lang.reflect.Member;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;25</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.lang.reflect.Method;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;26</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.lang.reflect.Modifier;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;27</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.ArrayList;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;28</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Collection;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;29</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Collections;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;30</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.HashSet;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;31</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.List;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;32</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Map;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;33</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Set;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;34</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.Map.Entry;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;35</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;36</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.azeckoski.reflectutils.annotations.ReflectIgnoreClassFields;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;37</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.azeckoski.reflectutils.annotations.ReflectIncludeStaticFields;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;38</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.azeckoski.reflectutils.annotations.ReflectTransientClassFields;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;39</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.azeckoski.reflectutils.exceptions.FieldnameNotFoundException;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;40</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.azeckoski.reflectutils.map.ArrayOrderedMap;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;41</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.azeckoski.reflectutils.map.OrderedMap;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;42</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;43</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;44</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * @param &lt;T&gt; the class type</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;45</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * This is used as a record (cache) of the information about a classes fields, properties, and</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;46</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * annotations among other things (property here means a bean standard property so a public getter</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;47</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * and setter which conform to the bean standard), it may or may not be a complete record of the</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;48</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * class&lt;br/&gt; This is primarily meant to provide easy access to information gathered via reflection</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;49</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * and puts all that information in one convenient package which can be cached (but must be cached</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;50</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * in a ClassLoader safe way)&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;51</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * NOTE: It is important that you do not hold onto this object as</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;52</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * it is meant to be cached in a way that it can be collected and will hold open the ClassLoader</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;53</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * that the class came from&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;54</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Terminology:&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;55</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Complete field: the value of the field can be</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;56</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * set (is not final or missing a setter) and retrieved (not missing a getter) &lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;57</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Partial field:</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;58</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * the value can either be set or retrieved but not both &lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;59</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Settable: the value can be set on this field (final fields cannot be set) &lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;60</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * Gettable: the value can be retrieved from this field &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;61</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;62</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * This object is immutable&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;63</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;64</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> * @author Aaron Zeckoski (azeckoski@gmail.com)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;65</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;66</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="keyword">public</span> <span class="keyword">class</span> ClassFields&lt;T&gt; {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;67</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;68</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;69</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Indicates the fields filtering to use when retrieving fields from types/objects: &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;70</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * {@link #COMPLETE} (default)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;71</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;72</td>
  <td class="nbHitsCovered">&nbsp;6</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> enum FieldsFilter {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;73</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;74</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * (default) all complete (read and write) fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;75</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;76</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        COMPLETE, </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;77</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;78</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * all readable fields (may not be writeable), includes transient fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;79</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;80</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        READABLE, </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;81</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;82</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * all writeable fields (may not be readable)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;83</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;84</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        WRITEABLE, </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;85</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;86</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * all serializable fields (readable fields but skips transient fields)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;87</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;88</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        SERIALIZABLE, </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;89</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;90</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * all fields including ones that are partial (read or write only)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;91</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;92</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        ALL</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;93</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    };</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;94</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;95</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;96</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param cp the {@link ClassProperty} object which represents a field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;97</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param filter (optional) indicates the fields to return the names for, can be null for defaults</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;98</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if this field is in the given filter</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;99</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;100</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">boolean</span> isFieldInFilter(ClassProperty cp, FieldsFilter filter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;101</td>
  <td class="nbHitsCovered">&nbsp;1785</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">boolean</span> in = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;102</td>
  <td class="nbHitsCovered">&nbsp;1785</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (FieldsFilter.ALL.equals(filter)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;103</td>
  <td class="nbHitsCovered">&nbsp;97</td>
  <td class="src"><pre class="src">&nbsp;            in = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;104</td>
  <td class="nbHitsCovered">&nbsp;1688</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (FieldsFilter.READABLE.equals(filter)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;105</td>
  <td class="nbHitsCovered">&nbsp;215</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isGettable(cp) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;106</td>
  <td class="nbHitsCovered">&nbsp;206</td>
  <td class="src"><pre class="src">&nbsp;                in = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;107</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;108</td>
  <td class="nbHitsCovered">&nbsp;1473</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (FieldsFilter.WRITEABLE.equals(filter)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;109</td>
  <td class="nbHitsCovered">&nbsp;78</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isSettable(cp) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;110</td>
  <td class="nbHitsCovered">&nbsp;56</td>
  <td class="src"><pre class="src">&nbsp;                in = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;111</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;112</td>
  <td class="nbHitsCovered">&nbsp;1395</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (FieldsFilter.SERIALIZABLE.equals(filter)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;113</td>
  <td class="nbHitsCovered">&nbsp;939</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isGettable(cp) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;114</td>
  <td class="nbHitsCovered">&nbsp;936</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (!cp.isTransient()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;115</td>
  <td class="nbHitsCovered">&nbsp;927</td>
  <td class="src"><pre class="src">&nbsp;                    in = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;116</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;117</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;118</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;119</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// return complete</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;120</td>
  <td class="nbHitsCovered">&nbsp;456</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isComplete(cp) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;121</td>
  <td class="nbHitsCovered">&nbsp;386</td>
  <td class="src"><pre class="src">&nbsp;                in = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;122</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;123</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;124</td>
  <td class="nbHitsCovered">&nbsp;1785</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> in;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;125</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;126</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;127</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;128</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Mode for finding the fields on classes/objects:&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;129</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * {@link #HYBRID} (default)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;130</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;131</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> enum FieldFindMode { </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;132</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;133</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * (default) finds fields by matched public getters and setters first and then public fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;134</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;135</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        HYBRID, </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;136</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;137</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * finds all fields which are accessible (public, protected, or private), ignores getters and setters</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;138</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;139</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        FIELD, </pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;140</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;141</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         * find all matched getters and setters only, ignores fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;142</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">         */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;143</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;        PROPERTY</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;144</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    };</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;145</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;146</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// PUBLIC access methods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;147</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;148</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;149</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the class that this {@link ClassFields} object represents the fields for</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;150</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @throws ClassLoadingException</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;151</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *             if the class this refers to has been garbage collected</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;152</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;153</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Class&lt;T&gt; getFieldClass() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;154</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> getStoredClass();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;155</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;156</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;157</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;158</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the list of field names &lt;br/&gt; Only returns the complete</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;159</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *         fields, the partial ones (only settable or gettable) will not be returned</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;160</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;161</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> List&lt;String&gt; getFieldNames() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;162</td>
  <td class="nbHitsCovered">&nbsp;18</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> getFieldNames(<span class="keyword">null</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;163</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;164</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;165</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;166</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Get the field names but filter the fields to return</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;167</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param filter (optional) indicates the fields to return the names for, can be null for defaults</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;168</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the list of field names</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;169</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;170</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> List&lt;String&gt; getFieldNames(FieldsFilter filter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;171</td>
  <td class="nbHitsCovered">&nbsp;108</td>
  <td class="src"><pre class="src">&nbsp;        List&lt;String&gt; names = <span class="keyword">new</span> ArrayList&lt;String&gt;();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;172</td>
  <td class="nbHitsCovered">&nbsp;108</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Entry&lt;String, ClassProperty&gt; entry : namesToProperties.getEntries()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;173</td>
  <td class="nbHitsCovered">&nbsp;404</td>
  <td class="src"><pre class="src">&nbsp;            String name = entry.getKey();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;174</td>
  <td class="nbHitsCovered">&nbsp;404</td>
  <td class="src"><pre class="src">&nbsp;            ClassProperty cp = entry.getValue();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;175</td>
  <td class="nbHitsCovered">&nbsp;404</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isFieldInFilter(cp, filter) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;176</td>
  <td class="nbHitsCovered">&nbsp;333</td>
  <td class="src"><pre class="src">&nbsp;                names.add(name);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;177</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;178</td>
  <td class="nbHitsCovered">&nbsp;404</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;179</td>
  <td class="nbHitsCovered">&nbsp;108</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> names;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;180</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;181</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;182</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;183</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Get the types for fields in a class</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;184</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the map of fieldName -&gt; field type</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;185</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;186</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Map&lt;String, Class&lt;?&gt;&gt; getFieldTypes() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;187</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> getFieldTypes(<span class="keyword">null</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;188</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;189</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;190</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;191</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Get the types for fields in a class but filter the fields to get the types for</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;192</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param filter (optional) indicates the fields to return the types for, can be null for defaults</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;193</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the map of fieldName -&gt; field type</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;194</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;195</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Map&lt;String, Class&lt;?&gt;&gt; getFieldTypes(FieldsFilter filter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;196</td>
  <td class="nbHitsCovered">&nbsp;314</td>
  <td class="src"><pre class="src">&nbsp;        OrderedMap&lt;String, Class&lt;?&gt;&gt; fieldTypes = <span class="keyword">new</span> ArrayOrderedMap&lt;String, Class&lt;?&gt;&gt;();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;197</td>
  <td class="nbHitsCovered">&nbsp;314</td>
  <td class="src"><pre class="src">&nbsp;        fieldTypes.setName(getStoredClass().getName());</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;198</td>
  <td class="nbHitsCovered">&nbsp;314</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Entry&lt;String, ClassProperty&gt; entry : namesToProperties.getEntries()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;199</td>
  <td class="nbHitsCovered">&nbsp;1241</td>
  <td class="src"><pre class="src">&nbsp;            String name = entry.getKey();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;200</td>
  <td class="nbHitsCovered">&nbsp;1241</td>
  <td class="src"><pre class="src">&nbsp;            ClassProperty cp = entry.getValue();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;201</td>
  <td class="nbHitsCovered">&nbsp;1241</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isFieldInFilter(cp, filter) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;202</td>
  <td class="nbHitsCovered">&nbsp;1205</td>
  <td class="src"><pre class="src">&nbsp;                fieldTypes.put(name, cp.getType());</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;203</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;204</td>
  <td class="nbHitsCovered">&nbsp;1241</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;205</td>
  <td class="nbHitsCovered">&nbsp;314</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> fieldTypes;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;206</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;207</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;208</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;209</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the number of fields (only includes complete fields)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;210</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;211</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">int</span> size() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;212</td>
  <td class="nbHitsCovered">&nbsp;56</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> size(<span class="keyword">null</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;213</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;214</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;215</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;216</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param filter (optional) indicates the fields to include in the count, can be null for defaults</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;217</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the number of fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;218</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;219</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">int</span> size(FieldsFilter filter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;220</td>
  <td class="nbHitsCovered">&nbsp;89</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">int</span> size = 0;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;221</td>
  <td class="nbHitsCovered">&nbsp;89</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (FieldsFilter.ALL.equals(filter)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;222</td>
  <td class="nbHitsCovered">&nbsp;9</td>
  <td class="src"><pre class="src">&nbsp;            size = namesToProperties.size();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;223</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;224</td>
  <td class="nbHitsCovered">&nbsp;80</td>
  <td class="src"><pre class="src">&nbsp;            size = getFieldNames(filter).size();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;225</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;226</td>
  <td class="nbHitsCovered">&nbsp;89</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> size;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;227</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;228</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;229</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;230</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if this has no fields, false otherwise (only includes complete fields)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;231</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;232</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">boolean</span> isEmpty() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;233</td>
  <td class="nbHitsCovered">&nbsp;5</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> size() &lt;= 0;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;234</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;235</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;236</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;237</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param filter (optional) indicates the fields to include in the check, can be null for defaults</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;238</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if this has no fields, false otherwise (only includes complete fields)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;239</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;240</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">boolean</span> isEmpty(FieldsFilter filter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;241</td>
  <td class="nbHitsCovered">&nbsp;15</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> size(filter) &lt;= 0;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;242</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;243</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;244</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;245</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Checks is this is a complete field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;246</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name the fieldName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;247</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if this fieldName is valid, false otherwise</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;248</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;249</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">boolean</span> isFieldNameValid(String name) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;250</td>
  <td class="nbHitsCovered">&nbsp;143</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> isFieldNameValid(name, <span class="keyword">null</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;251</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;252</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;253</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;254</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Checks if a field is valid for the given filter</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;255</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;256</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name the fieldName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;257</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param filter (optional) indicates the fields to include in the check, can be null for defaults</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;258</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if this fieldName is valid, false otherwise</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;259</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;260</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">boolean</span> isFieldNameValid(String name, FieldsFilter filter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;261</td>
  <td class="nbHitsCovered">&nbsp;186</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">boolean</span> valid = namesToProperties.containsKey(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;262</td>
  <td class="nbHitsCovered">&nbsp;186</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (valid) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;263</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// the field is real so check to see if it is in this filter</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;264</td>
  <td class="nbHitsCovered">&nbsp;140</td>
  <td class="src"><pre class="src">&nbsp;            ClassProperty cp = getAnyPropertyOrFail(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;265</td>
  <td class="nbHitsCovered">&nbsp;140</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> ( isFieldInFilter(cp, filter) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;266</td>
  <td class="nbHitsCovered">&nbsp;134</td>
  <td class="src"><pre class="src">&nbsp;                valid = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;267</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;268</td>
  <td class="nbHitsCovered">&nbsp;6</td>
  <td class="src"><pre class="src">&nbsp;                valid = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;269</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;270</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;271</td>
  <td class="nbHitsCovered">&nbsp;186</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> valid;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;272</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;273</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;274</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;275</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name the fieldName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;276</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the type of this field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;277</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @throws FieldnameNotFoundException if this fieldName is invalid</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;278</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;279</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Class&lt;?&gt; getFieldType(String name) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;280</td>
  <td class="nbHitsCovered">&nbsp;22</td>
  <td class="src"><pre class="src">&nbsp;        ClassProperty cp = getAnyPropertyOrFail(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;281</td>
  <td class="nbHitsCovered">&nbsp;22</td>
  <td class="src"><pre class="src">&nbsp;        Class&lt;?&gt; type = cp.getType();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;282</td>
  <td class="nbHitsCovered">&nbsp;22</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> type;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;283</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;284</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;285</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// ANNOTATIONS</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;286</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;287</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;288</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the set of all annotations on the class this refers to</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;289</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;290</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Set&lt;Annotation&gt; getClassAnnotations() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;291</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> <span class="keyword">new</span> HashSet&lt;Annotation&gt;( classData.getAnnotations() );</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;292</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;293</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;294</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;295</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name the fieldName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;296</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the set of all annotations on this field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;297</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @throws FieldnameNotFoundException if this fieldName is invalid</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;298</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;299</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Set&lt;Annotation&gt; getFieldAnnotations(String name) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;300</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;        ClassProperty cp = getAnyPropertyOrFail(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;301</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;        Collection&lt;Annotation&gt; annotes = cp.getAnnotationsCollection();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;302</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;        Set&lt;Annotation&gt; s = <span class="keyword">new</span> HashSet&lt;Annotation&gt;(annotes);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;303</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> s;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;304</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;305</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;306</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;307</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param annotationType</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;308</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            the annotation type to look for on this field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;309</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name the fieldName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;310</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the annotation if found OR null if none found</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;311</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @throws FieldnameNotFoundException if this fieldName is invalid</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;312</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;313</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Annotation getFieldAnnotation(Class&lt;? <span class="keyword">extends</span> Annotation&gt; annotationType, String name) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;314</td>
  <td class="nbHitsCovered">&nbsp;27</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (annotationType == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;315</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"annotationType must not be null"</span>);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;316</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;317</td>
  <td class="nbHitsCovered">&nbsp;27</td>
  <td class="src"><pre class="src">&nbsp;        ClassProperty cp = getAnyPropertyOrFail(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;318</td>
  <td class="nbHitsCovered">&nbsp;27</td>
  <td class="src"><pre class="src">&nbsp;        Annotation a = cp.getAnnotation(annotationType);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;319</td>
  <td class="nbHitsCovered">&nbsp;27</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> a;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;320</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;321</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;322</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;323</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Will find the first field which has this annotation type</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;324</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;325</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param annotationType</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;326</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            the annotation type to look for on this field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;327</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the name of the field which has this annotation OR null if none found</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;328</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;329</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> String getFieldNameByAnnotation(Class&lt;? <span class="keyword">extends</span> Annotation&gt; annotationType) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;330</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (annotationType == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;331</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"annotationType must not be null"</span>);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;332</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;333</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        String fieldName = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;334</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        Collection&lt;ClassProperty&gt; cps = namesToProperties.values();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;335</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (ClassProperty classProperty : cps) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;336</td>
  <td class="nbHitsCovered">&nbsp;23</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (classProperty.getAnnotation(annotationType) != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;337</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;                fieldName = classProperty.getFieldName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;338</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">break</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;339</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;340</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;341</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> fieldName;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;342</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;343</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;344</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;345</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Finds the names of all the fields with the given annotation type</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;346</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param annotationType</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;347</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            the annotation type to look for on this field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;348</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the list of all field names sorted OR empty if none found</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;349</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;350</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> List&lt;String&gt; getFieldNamesWithAnnotation(Class&lt;? <span class="keyword">extends</span> Annotation&gt; annotationType) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;351</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        <span class="keyword">if</span> (annotationType == <span class="keyword">null</span>) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;352</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"annotationType must not be null"</span>);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;353</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;354</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        HashSet&lt;String&gt; fieldNames = <span class="keyword">new</span> HashSet&lt;String&gt;();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;355</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        Collection&lt;ClassProperty&gt; cps = namesToProperties.values();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;356</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        <span class="keyword">for</span> (ClassProperty classProperty : cps) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;357</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">if</span> (classProperty.getAnnotation(annotationType) != <span class="keyword">null</span>) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;358</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                fieldNames.add( classProperty.getFieldName() );</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;359</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;360</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;361</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        ArrayList&lt;String&gt; l = <span class="keyword">new</span> ArrayList&lt;String&gt;(fieldNames);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;362</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        Collections.sort(l);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;363</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        <span class="keyword">return</span> l;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;364</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;365</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;366</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// SPECIAL methods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;367</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;368</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;369</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * SPECIAL METHOD: accesses the internal data&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;370</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Returns a field property object for any field (not limited to only complete fields)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;371</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;372</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name the fieldName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;373</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the Property object which holds information about a field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;374</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @throws FieldnameNotFoundException if this fieldName is invalid</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;375</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;376</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassProperty getClassProperty(String name) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;377</td>
  <td class="nbHitsCovered">&nbsp;1561</td>
  <td class="src"><pre class="src">&nbsp;        ClassProperty cp = getAnyPropertyOrFail(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;378</td>
  <td class="nbHitsCovered">&nbsp;1546</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> cp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;379</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;380</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;381</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;382</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * SPECIAL METHOD: accesses the internal data&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;383</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Gets all the cached class properties objects related to this class&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;384</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * WARNING: Special method which allows access to the internal properties storage structure,</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;385</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * this should really only be used for filtering results in a way that is not supported by the</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;386</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * standard class fields methods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;387</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;388</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the complete set of field properties objects for this class</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;389</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;390</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> Map&lt;String, ClassProperty&gt; getAllClassProperties() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;391</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> <span class="keyword">this</span>.namesToProperties;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;392</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;393</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;394</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;395</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * SPECIAL METHOD: accesses the internal data&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;396</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Gets the internal cache object for the class which holds all fields, methods, constructors, and annotations</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;397</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the class data cache object</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;398</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;399</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassData&lt;T&gt; getClassData() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;400</td>
  <td class="nbHitsCovered">&nbsp;22</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> <span class="keyword">this</span>.classData;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;401</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;402</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;403</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;404</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// VARIABLES</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;405</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;406</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String FIELD_CLASS = <span class="string">"class"</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;407</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String METHOD_GET_CLASS = <span class="string">"getClass"</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;408</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String PREFIX_IS = <span class="string">"is"</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;409</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String PREFIX_GET = <span class="string">"get"</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;410</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String PREFIX_SET = <span class="string">"set"</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;411</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;412</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">final</span> FieldFindMode fieldFindMode;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;413</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;414</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * if true then include the "class" field as if it were a regular field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;415</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;416</td>
  <td class="nbHitsCovered">&nbsp;162</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">boolean</span> includeClassField = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;417</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;418</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * if true then include static fields, otherwise skip them (default is to skip)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;419</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;420</td>
  <td class="nbHitsCovered">&nbsp;162</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">boolean</span> includeStaticFields = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;421</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;422</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * includes all the field names which should be ignored for reflection</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;423</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;424</td>
  <td class="nbHitsCovered">&nbsp;162</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">final</span> Set&lt;String&gt; ignoredFieldNames = <span class="keyword">new</span> HashSet&lt;String&gt;();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;425</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;426</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * includes all the field names which should be marked as transient</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;427</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;428</td>
  <td class="nbHitsCovered">&nbsp;162</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">final</span> Set&lt;String&gt; transientFieldNames = <span class="keyword">new</span> HashSet&lt;String&gt;();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;429</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// WARNING: all these things can hold open a ClassLoader</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;430</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">final</span> ClassData&lt;T&gt; classData;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;431</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">final</span> OrderedMap&lt;String, ClassProperty&gt; namesToProperties; <span class="comment">// this contains all properties data (includes partials)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;432</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;433</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// PUBLIC constructors</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;434</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;435</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;436</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Constructor for when you have everything already in nice arrays, the getter and setter method</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;437</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * arrays MUST be the same length AND the same order (i.e. getter[0] and setter[0] must refer to</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;438</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * the same property), no arguments can be null but arrays can be empty, null values in arrays</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;439</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * will be ignored&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;440</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * &lt;b&gt;NOTE:&lt;/b&gt; validation of the getters and setters is somewhat costly</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;441</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * so you may want to cache the constructed object</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;442</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;443</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;444</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            this is the class whose fields are represented</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;445</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param getterMethods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;446</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            array of getter methods for properties</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;447</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param setterMethods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;448</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            array of setter methods for properties</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;449</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param publicFields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;450</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            array of public fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;451</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;452</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassFields(Class&lt;T&gt; fieldClass, Method[] getterMethods, Method[] setterMethods,</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;453</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            Field[] publicFields) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;454</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (fieldClass == <span class="keyword">null</span> || getterMethods == <span class="keyword">null</span> || setterMethods == <span class="keyword">null</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;455</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                || publicFields == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;456</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"None of the params can be null"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;457</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;458</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (getterMethods.length != setterMethods.length) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;459</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Getter and setter methods must be the same length"</span>);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;460</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;461</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// set the field class</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;462</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        classData = <span class="keyword">new</span> ClassData&lt;T&gt;(fieldClass);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;463</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        fieldFindMode = FieldFindMode.HYBRID;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;464</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// set the properties</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;465</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        namesToProperties = <span class="keyword">new</span> ArrayOrderedMap&lt;String, ClassProperty&gt;(getterMethods.length</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;466</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                + publicFields.length);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;467</td>
  <td class="nbHitsCovered">&nbsp;6</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; getterMethods.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;468</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (getterMethods[i] != <span class="keyword">null</span> &amp;&amp; setterMethods[i] != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;469</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                String fieldName = checkPropertyMethods(getterMethods[i], setterMethods[i]);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;470</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (!namesToProperties.containsKey(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;471</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    ClassProperty p = <span class="keyword">new</span> ClassProperty(fieldName, getterMethods[i],</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;472</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            setterMethods[i]);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;473</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    namesToProperties.put(fieldName, p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;474</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;475</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;476</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;477</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        populateFields(publicFields);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;478</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        populateAnnotationsFields();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;479</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;480</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;481</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;482</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Constructor for when you have descriptors and fields in arrays (if you have descriptors it is</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;483</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * easy to get the fields from the class using {@link Class#getFields()}), no arguments can be</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;484</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * null but the arrays can be empty</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;485</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;486</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;487</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            this is the class whose fields are represented</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;488</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param descriptors</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;489</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            an array of descriptors, you can get these from</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;490</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            {@link BeanInfo#getPropertyDescriptors()} and you can get the {@link BeanInfo}</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;491</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            from {@link Introspector#getBeanInfo(Class)}</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;492</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param publicFields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;493</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            array of public fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;494</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;495</td>
  <td class="nbHitsCovered">&nbsp;3</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassFields(Class&lt;T&gt; fieldClass, PropertyDescriptor[] descriptors, Field[] publicFields) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;496</td>
  <td class="nbHitsCovered">&nbsp;3</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (fieldClass == <span class="keyword">null</span> || descriptors == <span class="keyword">null</span> || publicFields == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;497</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"None of the params can be null"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;498</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;499</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        classData = <span class="keyword">new</span> ClassData&lt;T&gt;(fieldClass);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;500</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        fieldFindMode = FieldFindMode.HYBRID;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;501</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        namesToProperties = <span class="keyword">new</span> ArrayOrderedMap&lt;String, ClassProperty&gt;(descriptors.length + publicFields.length);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;502</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        populateProperties(descriptors);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;503</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        populateFields(publicFields);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;504</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;        populateAnnotationsFields();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;505</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;506</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;507</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;508</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Constructor to use when you know nothing about the class at all, this will use very</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;509</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * straightforward walking over the PUBLIC methods and fields on the class and will extract the field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;510</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * information, this uses the default field finding mode of {@link FieldFindMode#HYBRID}&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;511</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * &lt;b&gt;NOTE:&lt;/b&gt; This is fairly expensive so it is recommended that you cache the constructed object</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;512</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * by using {@link FieldUtils}</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;513</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;514</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;515</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            this is the class whose fields are represented</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;516</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;517</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassFields(Class&lt;T&gt; fieldClass) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;518</td>
  <td class="nbHitsCovered">&nbsp;125</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">this</span>(fieldClass, FieldFindMode.HYBRID, <span class="keyword">false</span>, <span class="keyword">false</span>);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;519</td>
  <td class="nbHitsCovered">&nbsp;124</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;520</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;521</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;522</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Constructor to use when you know nothing about the class at all, this will use very</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;523</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * straightforward walking over the methods and fields on the class and will extract the field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;524</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * information according to the field finding mode&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;525</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * &lt;b&gt;NOTE:&lt;/b&gt; This is fairly expensive so it is recommended that you cache the constructed object</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;526</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * by using {@link FieldUtils}</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;527</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;528</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass this is the class whose fields are represented</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;529</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param findMode the search mode for fields on the classes, allows the developer to control the way the </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;530</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * fields are found for later usage&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;531</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * HYBRID (default): finds fields by matched public getters and setters first and then public fields &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;532</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * FIELD: finds all fields which are accessible (public, protected, or private), ignores getters and setters &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;533</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * PROPERTY: find all matched getters and setters only, ignores fields &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;534</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;535</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassFields(Class&lt;T&gt; fieldClass, FieldFindMode findMode) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;536</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">this</span>(fieldClass, findMode, <span class="keyword">false</span>, <span class="keyword">false</span>);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;537</td>
  <td class="nbHitsCovered">&nbsp;13</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;538</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;539</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;540</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Constructor to use when you know nothing about the class at all, this will use the java</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;541</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * introspector as long as the param is true, otherwise it will simply call over to</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;542</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * {@link ClassFields#ClassFields(Class)} and use very</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;543</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * straightforward walking over the methods and fields on the class to extract the field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;544</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * information according to the field finding mode&lt;br/&gt; </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;545</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * &lt;b&gt;NOTE:&lt;/b&gt; This is fairly expensive so it is recommended that you cache the constructed object</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;546</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * by using {@link FieldUtils}</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;547</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;548</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass this is the class whose fields are represented</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;549</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param findMode the search mode for fields on the classes, allows the developer to control the way the </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;550</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * fields are found for later usage&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;551</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * HYBRID (default): finds fields by matched public getters and setters first and then public fields &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;552</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * FIELD: finds all fields which are accessible (public, protected, or private), ignores getters and setters &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;553</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * PROPERTY: find all matched getters and setters only, ignores fields &lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;554</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param useIntrospector</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;555</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            if this is true then the {@link Introspector} is used, this is generally the</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;556</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            slowest way to get information about a class but some people prefer it, if false</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;557</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            then the internal methods are used</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;558</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param includeClassFields if true then the "class" field (the result of getClass()) is included as a read only field</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;559</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;560</td>
  <td class="nbHitsCovered">&nbsp;155</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> ClassFields(Class&lt;T&gt; fieldClass, FieldFindMode findMode, <span class="keyword">boolean</span> useIntrospector, <span class="keyword">boolean</span> includeClassFields) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;561</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// set the field class</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;562</td>
  <td class="nbHitsCovered">&nbsp;155</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (fieldClass == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;563</td>
  <td class="nbHitsCovered">&nbsp;3</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"field class cannot be null"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;564</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;565</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        classData = <span class="keyword">new</span> ClassData&lt;T&gt;(fieldClass);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;566</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        fieldFindMode = findMode;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;567</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        includeClassField = includeClassFields;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;568</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        namesToProperties = <span class="keyword">new</span> ArrayOrderedMap&lt;String, ClassProperty&gt;();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;569</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;570</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// check for reflect annotations on the class</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;571</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        List&lt;Annotation&gt; annotations = classData.getAnnotations();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;572</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Annotation annotation : annotations) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;573</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// note that we compare the simple name to avoid issues with cross classloader types</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;574</td>
  <td class="nbHitsCovered">&nbsp;114</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (ReflectIncludeStaticFields.<span class="keyword">class</span>.getSimpleName().equals(annotation.annotationType().getSimpleName())) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;575</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                includeStaticFields = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;576</td>
  <td class="nbHitsCovered">&nbsp;113</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> <span class="keyword">if</span> (ReflectIgnoreClassFields.<span class="keyword">class</span>.getSimpleName().equals(annotation.annotationType().getSimpleName())) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;577</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="comment">// this does not work if the classloader of the annotation is not our classloader</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;578</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                String[] ignore = <span class="keyword">new</span> String[0];</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;579</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (ReflectIgnoreClassFields.<span class="keyword">class</span>.equals(annotation.annotationType())) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;580</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                    ignore = ((ReflectIgnoreClassFields)annotation).value();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;581</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;582</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// get the value out by reflection on the annotation</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;583</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    ClassData&lt;?&gt; cd = ClassDataCacher.getInstance().getClassData(annotation);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;584</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    List&lt;Method&gt; methods = cd.getMethods();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;585</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    <span class="keyword">for</span> (Method method : methods) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;586</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        <span class="keyword">if</span> (method.getName().equals(<span class="string">"value"</span>)) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;587</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;588</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                Object o = method.invoke(annotation, <span class="keyword">new</span> Object[] {});</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;589</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                ignore = (String[]) o;</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;590</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                            } <span class="keyword">catch</span> (Exception e) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;591</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Annotation of the same name has invalid value() method ("</span>+method+<span class="string">") and is not of the right type: "</span> + ReflectIgnoreClassFields.<span class="keyword">class</span>);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;592</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                            }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;593</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            <span class="keyword">break</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;594</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;595</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;596</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;597</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">for</span> (String name : ignore) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;598</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                    ignoredFieldNames.add(name);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;599</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;600</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> <span class="keyword">if</span> (ReflectTransientClassFields.<span class="keyword">class</span>.getSimpleName().equals(annotation.annotationType().getSimpleName())) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;601</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="comment">// this does not work if the classloader of the annotation is not our classloader</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;602</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                String[] transients = <span class="keyword">new</span> String[0];</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;603</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                <span class="keyword">if</span> (ReflectTransientClassFields.<span class="keyword">class</span>.equals(annotation.annotationType())) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;604</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    transients = ((ReflectTransientClassFields)annotation).value();</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;605</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;606</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// get the value out by reflection on the annotation</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;607</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    ClassData&lt;?&gt; cd = ClassDataCacher.getInstance().getClassData(annotation);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;608</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    List&lt;Method&gt; methods = cd.getMethods();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;609</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    <span class="keyword">for</span> (Method method : methods) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;610</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        <span class="keyword">if</span> (method.getName().equals(<span class="string">"value"</span>)) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;611</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;612</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                Object o = method.invoke(annotation, <span class="keyword">new</span> Object[] {});</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;613</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                transients = (String[]) o;</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;614</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                            } <span class="keyword">catch</span> (Exception e) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;615</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Annotation of the same name has invalid value() method ("</span>+method+<span class="string">") and is not of the right type: "</span> + ReflectTransientClassFields.<span class="keyword">class</span>);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;616</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                            }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;617</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            <span class="keyword">break</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;618</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;619</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;620</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;621</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                <span class="keyword">for</span> (String name : transients) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;622</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    transientFieldNames.add(name);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;623</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;624</td>
  <td class="nbHitsCovered">&nbsp;114</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;625</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;626</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;627</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// populate the internal storage with the list of properties</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;628</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (useIntrospector) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;629</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// use the java Introspector</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;630</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            BeanInfo bi;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;631</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;632</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                bi = Introspector.getBeanInfo(fieldClass);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;633</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                PropertyDescriptor[] descriptors = bi.getPropertyDescriptors();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;634</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (descriptors != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;635</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                    populateProperties(descriptors);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;636</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// fields</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;637</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                    populateFields(<span class="keyword">false</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;638</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;639</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    useIntrospector = <span class="keyword">false</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;640</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;641</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            } <span class="keyword">catch</span> (IntrospectionException e) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;642</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="comment">// no descriptors so fail over to using the internal methods</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;643</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                useIntrospector = <span class="keyword">false</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;644</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;645</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;646</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;647</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (!useIntrospector) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;648</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// construct using pure reflection</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;649</td>
  <td class="nbHitsCovered">&nbsp;150</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (FieldFindMode.HYBRID.equals(findMode) || FieldFindMode.PROPERTY.equals(findMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;650</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;                List&lt;ClassProperty&gt; properties = findProperties(<span class="keyword">true</span>);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;651</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">for</span> (ClassProperty property : properties) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;652</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                    String fieldName = property.getFieldName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;653</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                    namesToProperties.put(fieldName, property);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;654</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;655</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;656</td>
  <td class="nbHitsCovered">&nbsp;150</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (FieldFindMode.HYBRID.equals(findMode) || FieldFindMode.FIELD.equals(findMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;657</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (FieldFindMode.FIELD.equals(findMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;658</td>
  <td class="nbHitsCovered">&nbsp;3</td>
  <td class="src"><pre class="src">&nbsp;                    populateFields(<span class="keyword">true</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;659</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;660</td>
  <td class="nbHitsCovered">&nbsp;144</td>
  <td class="src"><pre class="src">&nbsp;                    populateFields(<span class="keyword">false</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;661</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;662</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;663</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;664</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;        populateAnnotationsFields();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;665</td>
  <td class="nbHitsCovered">&nbsp;152</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;666</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;667</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// PRIVATE analyzer methods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;668</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;669</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;670</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param name</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;671</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;672</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;673</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> ClassProperty getAnyPropertyOrFail(String name) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;674</td>
  <td class="nbHitsCovered">&nbsp;4975</td>
  <td class="src"><pre class="src">&nbsp;        ClassProperty cp = namesToProperties.get(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;675</td>
  <td class="nbHitsCovered">&nbsp;4975</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (cp == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;676</td>
  <td class="nbHitsCovered">&nbsp;2015</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> FieldnameNotFoundException(name);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;677</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;678</td>
  <td class="nbHitsCovered">&nbsp;2960</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> cp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;679</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;680</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;681</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> Class&lt;T&gt; getStoredClass() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;682</td>
  <td class="nbHitsCovered">&nbsp;326</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> classData.getType();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;683</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;684</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;685</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;686</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Determines if a {@link ClassProperty} is complete based on the {@link FieldFindMode} setting</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;687</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param cp a class property setting</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;688</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if it is complete, false otherwise</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;689</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;690</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">boolean</span> isComplete(ClassProperty cp) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;691</td>
  <td class="nbHitsCovered">&nbsp;456</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">boolean</span> complete = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;692</td>
  <td class="nbHitsCovered">&nbsp;456</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (FieldFindMode.FIELD.equals(fieldFindMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;693</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (cp.isField()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;694</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;                complete = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;695</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;696</td>
  <td class="nbHitsCovered">&nbsp;442</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (FieldFindMode.PROPERTY.equals(fieldFindMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;697</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (cp.isProperty()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;698</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;                complete = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;699</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;700</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;701</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// default</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;702</td>
  <td class="nbHitsCovered">&nbsp;434</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (cp.isComplete()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;703</td>
  <td class="nbHitsCovered">&nbsp;364</td>
  <td class="src"><pre class="src">&nbsp;                complete = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;704</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;705</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;706</td>
  <td class="nbHitsCovered">&nbsp;456</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> complete;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;707</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;708</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;709</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;710</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Determines if a {@link ClassProperty} is gettable based on the {@link FieldFindMode} setting</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;711</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param cp a class property setting</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;712</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if it is gettable, false otherwise</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;713</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;714</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">boolean</span> isGettable(ClassProperty cp) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;715</td>
  <td class="nbHitsCovered">&nbsp;1154</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">boolean</span> gettable = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;716</td>
  <td class="nbHitsCovered">&nbsp;1154</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (FieldFindMode.FIELD.equals(fieldFindMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;717</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">if</span> (cp.isField() &amp;&amp; cp.isGettable()) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;718</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                gettable = <span class="keyword">true</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;719</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;720</td>
  <td class="nbHitsCovered">&nbsp;1154</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (FieldFindMode.PROPERTY.equals(fieldFindMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;721</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">if</span> (cp.isProperty() &amp;&amp; cp.isGettable()) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;722</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                gettable = <span class="keyword">true</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;723</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;724</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;725</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// default</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;726</td>
  <td class="nbHitsCovered">&nbsp;1154</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (cp.isPublicGettable()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;727</td>
  <td class="nbHitsCovered">&nbsp;1142</td>
  <td class="src"><pre class="src">&nbsp;                gettable = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;728</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;729</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;730</td>
  <td class="nbHitsCovered">&nbsp;1154</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> gettable;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;731</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;732</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;733</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;734</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Determines if a {@link ClassProperty} is settable based on the {@link FieldFindMode} setting</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;735</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param cp a class property setting</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;736</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if it is settable, false otherwise</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;737</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;738</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">boolean</span> isSettable(ClassProperty cp) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;739</td>
  <td class="nbHitsCovered">&nbsp;78</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">boolean</span> settable = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;740</td>
  <td class="nbHitsCovered">&nbsp;78</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (FieldFindMode.FIELD.equals(fieldFindMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;741</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">if</span> (cp.isField() &amp;&amp; cp.isSettable()) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;742</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                settable = <span class="keyword">true</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;743</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;744</td>
  <td class="nbHitsCovered">&nbsp;78</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (FieldFindMode.PROPERTY.equals(fieldFindMode)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;745</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">if</span> (cp.isProperty() &amp;&amp; cp.isSettable()) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;746</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                settable = <span class="keyword">true</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;747</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;748</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;749</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// default</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;750</td>
  <td class="nbHitsCovered">&nbsp;78</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (cp.isPublicSettable()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;751</td>
  <td class="nbHitsCovered">&nbsp;56</td>
  <td class="src"><pre class="src">&nbsp;                settable = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;752</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;753</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;754</td>
  <td class="nbHitsCovered">&nbsp;78</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> settable;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;755</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;756</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;757</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;758</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Populate the internal storage from an array of descriptors</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;759</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;760</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param descriptors</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;761</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;762</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">void</span> populateProperties(PropertyDescriptor[] descriptors) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;763</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; descriptors.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;764</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;            PropertyDescriptor pd = descriptors[i];</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;765</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;            String fieldName = pd.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;766</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (!namesToProperties.containsKey(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;767</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;                Method getter = pd.getReadMethod();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;768</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;                Method setter = pd.getWriteMethod();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;769</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (getter != <span class="keyword">null</span> &amp;&amp; setter != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;770</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;                    ClassProperty p = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;771</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">if</span> (pd <span class="keyword">instanceof</span> IndexedPropertyDescriptor) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;772</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;773</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        <span class="comment">// Class&lt;?&gt; iType = ipd.getIndexedPropertyType();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;774</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        Method iGetter = ipd.getIndexedReadMethod();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;775</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        Method iSetter = ipd.getIndexedWriteMethod();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;776</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        <span class="keyword">if</span> (iGetter != <span class="keyword">null</span> &amp;&amp; iSetter != <span class="keyword">null</span>) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;777</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                            p = <span class="keyword">new</span> ClassProperty.IndexedProperty(fieldName, getter, setter,</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;778</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                                    iGetter, iSetter);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;779</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;780</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;781</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">if</span> (p == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;782</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;                        p = <span class="keyword">new</span> ClassProperty(fieldName, getter, setter);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;783</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;784</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;                    namesToProperties.put(fieldName, p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;785</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;786</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;787</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;788</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;789</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;790</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;791</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Checks a getter and setter pair and returns the proper property name</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;792</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;793</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param getter</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;794</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param setter</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;795</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the property name for this getter and setter pair</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;796</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;797</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> String checkPropertyMethods(Method getter, Method setter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;798</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        String name = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;799</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        String gName = getter.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;800</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        Class&lt;?&gt; gType = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;801</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        Class&lt;?&gt;[] paramTypes = getter.getParameterTypes();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;802</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (paramTypes.length == 0) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;803</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (isGetClassMethod(getter)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;804</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                <span class="keyword">throw</span> <span class="keyword">new</span> GetClassMethodException();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;805</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> <span class="keyword">if</span> (gName.startsWith(PREFIX_GET) || gName.startsWith(PREFIX_IS)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;806</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                gType = getter.getReturnType();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;807</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (gType != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;808</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    name = makeFieldNameFromMethod(gName);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;809</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;810</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;811</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;812</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (name != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;813</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">boolean</span> validSetter = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;814</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            String sName = setter.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;815</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            Class&lt;?&gt; sType = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;816</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (sName.startsWith(PREFIX_SET)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;817</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                Class&lt;?&gt;[] sParamTypes = setter.getParameterTypes();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;818</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (sParamTypes.length == 1) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;819</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    sType = sParamTypes[0];</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;820</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">if</span> (sType == <span class="keyword">null</span> || !sType.isAssignableFrom(gType)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;821</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"setter ("</span> + sName + <span class="string">") type ("</span> + sType</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;822</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                                + <span class="string">") and "</span> + <span class="string">"getter ("</span> + gName + <span class="string">") type ("</span> + gType</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;823</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                                + <span class="string">") do not match, they MUST match"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;824</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;825</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                        validSetter = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;826</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;827</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;828</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;829</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (!validSetter) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;830</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"setter ("</span> + sName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;831</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        + <span class="string">") does not appear to be a valid setter method "</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;832</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        + <span class="string">"(single param, name starts with set)"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;833</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;834</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;835</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"getter ("</span> + gName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;836</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    + <span class="string">") does not appear to be a valid getter method "</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;837</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    + <span class="string">"(0 params, name starts with get or is)"</span>);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;838</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;839</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> name;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;840</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;841</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;842</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;843</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Simple manual method for walking over a class and finding the bean properties, generally used</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;844</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * because the sun Introspector is so slow, note that this will also return all the non-matching</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;845</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * getters or setters if requested</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;846</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;847</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;848</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            the class to reflect over</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;849</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param includePartial</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;850</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            if true then includes getters and setters that do not match, if false then ONLY</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;851</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            include the getters and setters which match exactly</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;852</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return a list Property objects</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;853</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;854</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> List&lt;ClassProperty&gt; findProperties(<span class="keyword">boolean</span> includePartial) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;855</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// find the property methods from all public methods</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;856</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;        Map&lt;String, ClassProperty&gt; propertyMap = <span class="keyword">new</span> ArrayOrderedMap&lt;String, ClassProperty&gt;();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;857</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Method method : classData.getPublicMethods()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;858</td>
  <td class="nbHitsCovered">&nbsp;2030</td>
  <td class="src"><pre class="src">&nbsp;            Class&lt;?&gt;[] paramTypes = method.getParameterTypes();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;859</td>
  <td class="nbHitsCovered">&nbsp;2030</td>
  <td class="src"><pre class="src">&nbsp;            String name = method.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;860</td>
  <td class="nbHitsCovered">&nbsp;2030</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (! includeStaticFields &amp;&amp; isStatic(method)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;861</td>
  <td class="nbHitsCovered">&nbsp;5</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">continue</span>; <span class="comment">// skip statics</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;862</td>
  <td class="nbHitsCovered">&nbsp;2025</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> <span class="keyword">if</span> (isGetClassMethod(method) &amp;&amp; ! includeClassField) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;863</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">continue</span>; <span class="comment">// skip class field</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;864</td>
  <td class="nbHitsCovered">&nbsp;1878</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> <span class="keyword">if</span> (paramTypes.length == 0) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;865</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="comment">// no params</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;866</td>
  <td class="nbHitsCovered">&nbsp;1101</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (name.startsWith(PREFIX_GET) || name.startsWith(PREFIX_IS)) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;867</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// getter</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;868</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                    Class&lt;?&gt; returnType = method.getReturnType();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;869</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">if</span> (returnType != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;870</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                        <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;871</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                            String fieldName = makeFieldNameFromMethod(method.getName());</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;872</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                            ClassProperty p = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;873</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                            <span class="keyword">if</span> (propertyMap.containsKey(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;874</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                p = propertyMap.get(fieldName);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;875</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                                p.setGetter(method);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;876</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;877</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                                p = <span class="keyword">new</span> ClassProperty(fieldName, method, <span class="keyword">null</span>);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;878</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                                propertyMap.put(fieldName, p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;879</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;880</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        } <span class="keyword">catch</span> (Exception e) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;881</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                            <span class="comment">// nothing to do here but move on</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;882</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;883</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;884</td>
  <td class="nbHitsCovered">&nbsp;347</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;885</td>
  <td class="nbHitsCovered">&nbsp;777</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> <span class="keyword">if</span> (paramTypes.length == 1) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;886</td>
  <td class="nbHitsCovered">&nbsp;630</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (name.startsWith(PREFIX_SET)) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;887</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// setter (one param)</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;888</td>
  <td class="nbHitsCovered">&nbsp;312</td>
  <td class="src"><pre class="src">&nbsp;                    String fieldName = makeFieldNameFromMethod(method.getName());</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;889</td>
  <td class="nbHitsCovered">&nbsp;312</td>
  <td class="src"><pre class="src">&nbsp;                    ClassProperty p = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;890</td>
  <td class="nbHitsCovered">&nbsp;312</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">if</span> (propertyMap.containsKey(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;891</td>
  <td class="nbHitsCovered">&nbsp;276</td>
  <td class="src"><pre class="src">&nbsp;                        p = propertyMap.get(fieldName);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;892</td>
  <td class="nbHitsCovered">&nbsp;276</td>
  <td class="src"><pre class="src">&nbsp;                        p.setSetter(method);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;893</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;894</td>
  <td class="nbHitsCovered">&nbsp;36</td>
  <td class="src"><pre class="src">&nbsp;                        p = <span class="keyword">new</span> ClassProperty(fieldName, <span class="keyword">null</span>, method);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;895</td>
  <td class="nbHitsCovered">&nbsp;36</td>
  <td class="src"><pre class="src">&nbsp;                        propertyMap.put(fieldName, p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;896</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;897</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;898</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;899</td>
  <td class="nbHitsCovered">&nbsp;1878</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;900</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;        List&lt;ClassProperty&gt; properties = <span class="keyword">new</span> ArrayList&lt;ClassProperty&gt;();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;901</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Entry&lt;String, ClassProperty&gt; entry : propertyMap.entrySet()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;902</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;            ClassProperty p = entry.getValue();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;903</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (p != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;904</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (! includeStaticFields &amp;&amp; p.isStatic()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;905</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    <span class="keyword">continue</span>; <span class="comment">// skip any props with static fields</span></span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;906</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;907</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (ignoredFieldNames.contains(p.getFieldName())) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;908</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    <span class="keyword">continue</span>; <span class="comment">// skip ignored names</span></span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;909</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;910</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (includePartial) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;911</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// put all of them in</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;912</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;                    properties.add(p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;913</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;914</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// filter down to only the one which are complete</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;915</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                    <span class="keyword">if</span> (p.isGettable() &amp;&amp; p.isSettable()) {</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;916</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                        properties.add(p);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;917</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;918</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;919</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;920</td>
  <td class="nbHitsCovered">&nbsp;383</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;921</td>
  <td class="nbHitsCovered">&nbsp;147</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> properties;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;922</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;923</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;924</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;925</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Populates the fields from the class data object</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;926</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param includeNonPublic if true then all fields will be used, if false then only public fields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;927</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;928</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">void</span> populateFields(<span class="keyword">boolean</span> includeNonPublic) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;929</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// set the fields</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;930</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;        List&lt;Field&gt; fields = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;931</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (includeNonPublic) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;932</td>
  <td class="nbHitsCovered">&nbsp;3</td>
  <td class="src"><pre class="src">&nbsp;            fields = classData.getFields();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;933</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;934</td>
  <td class="nbHitsCovered">&nbsp;146</td>
  <td class="src"><pre class="src">&nbsp;            fields = classData.getPublicFields();</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;935</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;936</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Field field : fields) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;937</td>
  <td class="nbHitsCovered">&nbsp;154</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (! includeStaticFields &amp;&amp; isStatic(field)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;938</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">continue</span>; <span class="comment">// skip statics</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;939</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;940</td>
  <td class="nbHitsCovered">&nbsp;150</td>
  <td class="src"><pre class="src">&nbsp;            String fieldName = field.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;941</td>
  <td class="nbHitsCovered">&nbsp;150</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (ignoredFieldNames.contains(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;942</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">continue</span>; <span class="comment">// skip ignored names</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;943</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;944</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (! namesToProperties.containsKey(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;945</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;                ClassProperty p = <span class="keyword">new</span> ClassProperty(fieldName, field);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;946</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;                namesToProperties.put(fieldName, p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;947</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;948</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;949</td>
  <td class="nbHitsCovered">&nbsp;149</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;950</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;951</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;952</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param member any class member</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;953</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if static, false otherwise</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;954</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;955</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">protected</span> <span class="keyword">boolean</span> isStatic(Member member) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;956</td>
  <td class="nbHitsCovered">&nbsp;2767</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> ( Modifier.isStatic(member.getModifiers()) ) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;957</td>
  <td class="nbHitsCovered">&nbsp;16</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;958</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;959</td>
  <td class="nbHitsCovered">&nbsp;2751</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;960</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;961</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;962</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;963</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param publicFields</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;964</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            takes an array of fields and populates the internal storage mechanisms</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;965</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;966</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">void</span> populateFields(Field[] publicFields) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;967</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// set the fields</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;968</td>
  <td class="nbHitsCovered">&nbsp;8</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i &lt; publicFields.length; i++) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;969</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (publicFields[i] != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;970</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                String fieldName = publicFields[i].getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;971</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (!namesToProperties.containsKey(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;972</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    ClassProperty p = <span class="keyword">new</span> ClassProperty(fieldName, publicFields[i]);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;973</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;                    namesToProperties.put(fieldName, p);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;974</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;975</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;976</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;977</td>
  <td class="nbHitsCovered">&nbsp;4</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;978</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;979</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;980</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * We need to find all the class, method, and field annotations and not just the ones on public</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;981</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * methods so we are going through everything on this class and all the super classes&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;982</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * WARNING: this is NOT cheap and the results need to be cached badly&lt;br/&gt;</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;983</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * NOTE: This also populates all the fields in every property and checks and removes</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;984</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * all staics or excluded fields if any slipped through the previous processes</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;985</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;986</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param fieldClass</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;987</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            the class to analyze</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;988</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;989</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">private</span> <span class="keyword">void</span> populateAnnotationsFields() {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;990</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// get the annotations from all class methods</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;991</td>
  <td class="nbHitsCovered">&nbsp;156</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Method method : classData.getMethods()) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;992</td>
  <td class="nbHitsCovered">&nbsp;2612</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">int</span> paramCount = method.getParameterTypes().length;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;993</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// only include annotations on methods which *might* be fields (no args, 1 arg, or 2 args for the special ones)</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;994</td>
  <td class="nbHitsCovered">&nbsp;2612</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (paramCount &lt;= 2) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;995</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;996</td>
  <td class="nbHitsCovered">&nbsp;2612</td>
  <td class="src"><pre class="src">&nbsp;                    String name = makeFieldNameFromMethod(method.getName());</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;997</td>
  <td class="nbHitsCovered">&nbsp;2612</td>
  <td class="src"><pre class="src">&nbsp;                    ClassProperty cp = getAnyPropertyOrFail(name);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;998</td>
  <td class="nbHitsCovered">&nbsp;691</td>
  <td class="src"><pre class="src">&nbsp;                    Annotation[] annotations = method.getAnnotations();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;999</td>
  <td class="nbHitsCovered">&nbsp;831</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">for</span> (Annotation annotation : annotations) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1000</td>
  <td class="nbHitsCovered">&nbsp;140</td>
  <td class="src"><pre class="src">&nbsp;                        <span class="keyword">if</span> (annotation != <span class="keyword">null</span>) cp.addAnnotation(annotation);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1001</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1002</td>
  <td class="nbHitsCovered">&nbsp;1921</td>
  <td class="src"><pre class="src">&nbsp;                } <span class="keyword">catch</span> (FieldnameNotFoundException e) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1003</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="comment">// nothing to do but keep going</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1004</td>
  <td class="nbHitsCovered">&nbsp;691</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1005</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1006</td>
  <td class="nbHitsCovered">&nbsp;2612</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1007</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// get the annotations from all class fields</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1008</td>
  <td class="nbHitsCovered">&nbsp;156</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (Field field : classData.getFields()) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1009</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1010</td>
  <td class="nbHitsCovered">&nbsp;605</td>
  <td class="src"><pre class="src">&nbsp;                String fieldName = field.getName();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1011</td>
  <td class="nbHitsCovered">&nbsp;605</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (! includeStaticFields &amp;&amp; isStatic(field)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1012</td>
  <td class="nbHitsCovered">&nbsp;7</td>
  <td class="src"><pre class="src">&nbsp;                    namesToProperties.remove(fieldName); <span class="comment">// as a final check, take this out if it is in there</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1013</td>
  <td class="nbHitsCovered">&nbsp;7</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">continue</span>; <span class="comment">// skip statics</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1014</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1015</td>
  <td class="nbHitsCovered">&nbsp;598</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (ignoredFieldNames.contains(fieldName)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1016</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                    namesToProperties.remove(fieldName); <span class="comment">// as a final check, take this out if it is in there</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1017</td>
  <td class="nbHitsCovered">&nbsp;1</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">continue</span>; <span class="comment">// skip ignored names</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1018</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1019</td>
  <td class="nbHitsCovered">&nbsp;597</td>
  <td class="src"><pre class="src">&nbsp;                ClassProperty cp = getAnyPropertyOrFail(fieldName);</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1020</td>
  <td class="nbHitsCovered">&nbsp;518</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">if</span> (cp.getField() == <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1021</td>
  <td class="nbHitsCovered">&nbsp;367</td>
  <td class="src"><pre class="src">&nbsp;                    cp.setField(field); <span class="comment">// ensure there is a field set for all methods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1022</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1023</td>
  <td class="nbHitsCovered">&nbsp;518</td>
  <td class="src"><pre class="src">&nbsp;                Annotation[] annotations = field.getAnnotations();</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1024</td>
  <td class="nbHitsCovered">&nbsp;691</td>
  <td class="src"><pre class="src">&nbsp;                <span class="keyword">for</span> (Annotation annotation : annotations) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1025</td>
  <td class="nbHitsCovered">&nbsp;173</td>
  <td class="src"><pre class="src">&nbsp;                    <span class="keyword">if</span> (annotation != <span class="keyword">null</span>) cp.addAnnotation(annotation);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1026</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1027</td>
  <td class="nbHitsCovered">&nbsp;79</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">catch</span> (FieldnameNotFoundException e) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1028</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="comment">// nothing to do but keep going</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1029</td>
  <td class="nbHitsCovered">&nbsp;1115</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1030</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1031</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="comment">// now mark the transient fields as such</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1032</td>
  <td class="nbHitsCovered">&nbsp;156</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">for</span> (String fieldName : transientFieldNames) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1033</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">try</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1034</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                ClassProperty cp = getAnyPropertyOrFail(fieldName);</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1035</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;                cp.transientField = <span class="keyword">true</span>;</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1036</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            } <span class="keyword">catch</span> (FieldnameNotFoundException e) {</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1037</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;                <span class="comment">// nothing to do but keep going</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1038</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1039</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1040</td>
  <td class="nbHitsCovered">&nbsp;156</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1041</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1042</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    @Override</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1043</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> String toString() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1044</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        <span class="keyword">return</span> <span class="string">"("</span> + getStoredClass().getName() + <span class="string">"):mode="</span>+fieldFindMode.name()+<span class="string">":"</span> + getFieldNames(FieldsFilter.ALL);</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1045</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1046</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1047</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// STATIC methods</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1048</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1049</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1050</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param methodName</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1051</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            a getter or setter style method name (e.g. getThing, setStuff, isType)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1052</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the fieldName equivalent (thing, stuff, type)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1053</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1054</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> String makeFieldNameFromMethod(String methodName) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1055</td>
  <td class="nbHitsCovered">&nbsp;3285</td>
  <td class="src"><pre class="src">&nbsp;        String name = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1056</td>
  <td class="nbHitsCovered">&nbsp;3285</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (methodName.startsWith(PREFIX_IS)) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1057</td>
  <td class="nbHitsCovered">&nbsp;32</td>
  <td class="src"><pre class="src">&nbsp;            name = unCapitalize(methodName.substring(2));</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1058</td>
  <td class="nbHitsCovered">&nbsp;3253</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> <span class="keyword">if</span> (methodName.startsWith(PREFIX_GET) || methodName.startsWith(PREFIX_SET)) {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1059</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            <span class="comment">// set or get</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1060</td>
  <td class="nbHitsCovered">&nbsp;1488</td>
  <td class="src"><pre class="src">&nbsp;            name = unCapitalize(methodName.substring(3));</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1061</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1062</td>
  <td class="nbHitsCovered">&nbsp;1765</td>
  <td class="src"><pre class="src">&nbsp;            name = methodName;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1063</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1064</td>
  <td class="nbHitsCovered">&nbsp;3285</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> name;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1065</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1066</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1067</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1068</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Capitalize a string</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1069</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1070</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param input</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1071</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            any string</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1072</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the string capitalized (e.g. myString -&gt; MyString)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1073</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1074</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> String capitalize(String input) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1075</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        String cap = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1076</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (input.length() == 0) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1077</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;            cap = <span class="string">""</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1078</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1079</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">char</span> first = Character.toUpperCase(input.charAt(0));</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1080</td>
  <td class="nbHitsCovered">&nbsp;12</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (input.length() == 1) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1081</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                cap = first + <span class="string">""</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1082</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1083</td>
  <td class="nbHitsCovered">&nbsp;10</td>
  <td class="src"><pre class="src">&nbsp;                cap = first + input.substring(1);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1084</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1085</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1086</td>
  <td class="nbHitsCovered">&nbsp;14</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> cap;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1087</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1088</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1089</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1090</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * undo string capitalization</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1091</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * </span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1092</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param input</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1093</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            any string</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1094</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return the string uncapitalized (e.g. MyString -&gt; myString)</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1095</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1096</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> String unCapitalize(String input) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1097</td>
  <td class="nbHitsCovered">&nbsp;1535</td>
  <td class="src"><pre class="src">&nbsp;        String cap = <span class="keyword">null</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1098</td>
  <td class="nbHitsCovered">&nbsp;1535</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (input.length() == 0) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1099</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;            cap = <span class="string">""</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1100</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1101</td>
  <td class="nbHitsCovered">&nbsp;1533</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">char</span> first = Character.toLowerCase(input.charAt(0));</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1102</td>
  <td class="nbHitsCovered">&nbsp;1533</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (input.length() == 1) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1103</td>
  <td class="nbHitsCovered">&nbsp;2</td>
  <td class="src"><pre class="src">&nbsp;                cap = first + <span class="string">""</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1104</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            } <span class="keyword">else</span> {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1105</td>
  <td class="nbHitsCovered">&nbsp;1531</td>
  <td class="src"><pre class="src">&nbsp;                cap = first + input.substring(1);</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1106</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1107</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1108</td>
  <td class="nbHitsCovered">&nbsp;1535</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> cap;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1109</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1110</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1111</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1112</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @param method</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1113</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     *            any method</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1114</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * @return true if this is the getClass() method for standard objects</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1115</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1116</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isGetClassMethod(Method method) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1117</td>
  <td class="nbHitsCovered">&nbsp;2031</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">boolean</span> gc = <span class="keyword">false</span>;</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1118</td>
  <td class="nbHitsCovered">&nbsp;2031</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">if</span> (method != <span class="keyword">null</span>) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1119</td>
  <td class="nbHitsCovered">&nbsp;2031</td>
  <td class="src"><pre class="src">&nbsp;            <span class="keyword">if</span> (METHOD_GET_CLASS.equals(method.getName())) {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1120</td>
  <td class="nbHitsCovered">&nbsp;148</td>
  <td class="src"><pre class="src">&nbsp;                gc = <span class="keyword">true</span>;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1121</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;            }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1122</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        }</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1123</td>
  <td class="nbHitsCovered">&nbsp;2031</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">return</span> gc;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1124</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1125</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1126</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">// INNER classes</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1127</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1128</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="comment">/**</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1129</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     * Indicates that this is the getter or setter for the class type and should be ignored</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1130</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;<span class="comment">     */</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1131</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> GetClassMethodException <span class="keyword">extends</span> RuntimeException {</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1132</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;        <span class="keyword">public</span> GetClassMethodException() {</pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1133</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;            <span class="keyword">super</span>();</span></pre></td>
</tr>
<tr>
  <td class="numLineCover">&nbsp;1134</td>
  <td class="nbHitsUncovered">&nbsp;0</td>
  <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;        }</span></pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1135</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;    }</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1136</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;</pre></td>
</tr>
<tr>
  <td class="numLine">&nbsp;1137</td>
  <td class="nbHits">&nbsp;</td>
  <td class="src"><pre class="src">&nbsp;}</pre></td>
</tr>
</table>
<div class="footer">
Reports generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a>.
</div>
</body>
</html>
